package com.wang.factory;

import com.wang.service.Service;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

//代理工厂
public class ProxyFactory {
    //这个是目标对象
    Service star;
    public ProxyFactory(Service star){
        this.star = star;
    }

    //生成代理对象
    public Object getAgent(){
        //使用工具生成
        return Proxy.newProxyInstance(
                // 第一个参数目标对象先得到类型，得到类加载器，给目标对象，加载到jvm
                star.getClass().getClassLoader(),
                //第二个参数 目标对象实现的所有业务接口中的方法
                star.getClass().getInterfaces()
                //第三个参数 代理功能实现的地方，进行增强功能
                , new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        System.out.println("预定演唱地点");
                        System.out.println("预定演唱时间");
                       //目标对象的实现功能，调用目标方法
                        method.invoke(star,args);
                        System.out.println("最后结账走人");
                        return null;
                    }
                });
    }

}
